#!/bin/bash

# 微信公众号文章解析器 - 自动保存为Markdown脚本
# 使用方法: ./fetch_wechat_article.sh <文章URL> [超时时间] [输出文件]

# 默认参数
DEFAULT_TIMEOUT=30000
DEFAULT_OUTPUT_FILE="wechat_article_result_$(date +%Y%m%d_%H%M%S).md"

# 参数解析
URL="$1"
TIMEOUT="${2:-$DEFAULT_TIMEOUT}"
OUTPUT_FILE="${3:-$DEFAULT_OUTPUT_FILE}"

# 检查URL参数
if [ -z "$URL" ]; then
    echo "错误: 请提供微信公众号文章URL"
    echo "使用方法: ./fetch_wechat_article.sh <文章URL> [超时时间] [输出文件]"
    exit 1
fi

# 检查URL格式
if [[ ! $URL =~ ^https://mp.weixin.qq.com/s/ ]]; then
    echo "警告: URL似乎不是标准的微信公众号文章链接"
    echo "建议使用类似 https://mp.weixin.qq.com/s/xxxxx 的链接格式"
fi

# 显示信息
echo "正在解析文章: $URL"
echo "超时设置: ${TIMEOUT}ms"
echo "结果将保存到: $OUTPUT_FILE"

# 创建临时JSON文件
temp_json=$(mktemp)

# 执行curl命令并保存到临时JSON文件
curl -s -X POST http://localhost:8000/process \
  -H "Content-Type: application/json" \
  -d "{\"url\": \"$URL\", \"timeout\": $TIMEOUT}" \
  > "$temp_json"

# 检查curl执行状态
if [ $? -eq 0 ]; then
    # 检查结果是否成功
    if grep -q '"success":true' "$temp_json"; then
        echo "✅ 文章解析成功!"
        
        # 提取文章信息并转换为Markdown
        # 创建临时文件来构建内容，避免转义字符问题
        TEMP_MD=$(mktemp)
        
        # 提取标题
        TITLE=$(grep -o '"title":"[^"]*"' "$temp_json" | sed 's/"title":"//' | sed 's/"//' | head -1)
        echo "# $TITLE" > "$TEMP_MD"
        echo >> "$TEMP_MD"
        echo "📝 文章标题: $TITLE"
        
        # 提取摘要
        SUMMARY=$(grep -o '"summary":"[^"]*"' "$temp_json" | sed 's/"summary":"//' | sed 's/"//' | head -1)
        if [ ! -z "$SUMMARY" ]; then
            echo "## 摘要" >> "$TEMP_MD"
            echo "$SUMMARY" >> "$TEMP_MD"
            echo >> "$TEMP_MD"
        fi
        
        # 提取作者和发布时间
        AUTHOR=$(grep -o '"author":"[^"]*"' "$temp_json" | sed 's/"author":"//' | sed 's/"//' | head -1 | sed 's/\\u0026/\&/g')
        PUBLISH_TIME=$(grep -o '"publish_time":"[^"]*"' "$temp_json" | sed 's/"publish_time":"//' | sed 's/"//' | head -1)
        
        # 清理作者字段 - 使用printf避免转义问题
         CLEAN_AUTHOR=$(printf "%s" "$AUTHOR" | tr -d '\n\r' | tr -s '[:space:]' ' ' | sed 's/^ *//;s/ *$//')
         
         # 清理发布时间字段
         CLEAN_TIME=$(printf "%s" "$PUBLISH_TIME" | tr -d '\n\r' | tr -s '[:space:]' ' ' | sed 's/^ *//;s/ *$//')
        
        # 基本信息部分
        echo "## 基本信息" >> "$TEMP_MD"
        echo "- **作者**: ${CLEAN_AUTHOR:-未知}" >> "$TEMP_MD"
        echo "- **发布时间**: ${CLEAN_TIME:-未知}" >> "$TEMP_MD"
        echo "- **原文链接**: [$URL]($URL)" >> "$TEMP_MD"
        echo >> "$TEMP_MD"
        
        # 提取封面图片
        COVER_IMAGE=$(grep -o '"cover_image":"[^"]*"' "$temp_json" | sed 's/"cover_image":"//' | sed 's/"//' | head -1)
        if [ ! -z "$COVER_IMAGE" ]; then
            echo "## 封面图" >> "$TEMP_MD"
            echo "![封面图]($COVER_IMAGE)" >> "$TEMP_MD"
            echo >> "$TEMP_MD"
        fi
        
        # 添加正文标记
        echo "## 正文预览" >> "$TEMP_MD"
        echo "文章内容已解析，完整正文请参考原始数据。" >> "$TEMP_MD"
        echo >> "$TEMP_MD"
        
        # 提取图片列表
        IMAGES=$(grep -o '"images":\[[^]]*\]' "$temp_json")
        if [ ! -z "$IMAGES" ]; then
            echo "## 提示" >> "$TEMP_MD"
            echo "如需查看完整文章内容和图片列表，可通过API获取原始JSON响应后进一步处理。" >> "$TEMP_MD"
        fi
        
        # 复制到最终输出文件
          cp "$TEMP_MD" "$OUTPUT_FILE"
          rm "$TEMP_MD"
          
          # 后处理：去除文件中的可见转义字符\n
          # 使用不同的分隔符以避免转义问题
          sed -i 's|\\n||g' "$OUTPUT_FILE"
          
          # 清理作者和发布时间字段中的多余空格
          sed -i 's/- \*\*作者\*\*: */- \*\*作者\*\*: /g' "$OUTPUT_FILE"
          sed -i 's/- \*\*发布时间\*\*: */- \*\*发布时间\*\*: /g' "$OUTPUT_FILE"
          sed -i '/^- \*\*作者\*\*:/s/  */ /g' "$OUTPUT_FILE"
          sed -i '/^- \*\*发布时间\*\*:/s/  */ /g' "$OUTPUT_FILE"
          
          # 修复原文链接 - 使用直接方法
          # 先删除包含原文链接的行
          sed -i '/原文链接/d' "$OUTPUT_FILE"
          # 在发布时间行后添加正确格式的URL
          sed -i "/发布时间/a\\- **原文链接**: [$URL]($URL)" "$OUTPUT_FILE"
          
          # 修复封面图部分 - 移除所有封面图相关行，然后重新添加
          sed -i '/封面图/,+1d' "$OUTPUT_FILE"
          # 在原文链接后添加正确格式的封面图
          sed -i "/原文链接/a\\\n## 封面图\n![封面图]($COVER_IMAGE)" "$OUTPUT_FILE"
        
        echo -e "\n✅ Markdown文件创建成功，已保存到 $OUTPUT_FILE"
    else
        echo "❌ 文章解析失败，请检查日志和URL"
        # 如果解析失败，保存原始JSON响应以便调试
        cp "$temp_json" "${OUTPUT_FILE%.md}.json"
        echo "原始响应已保存到 ${OUTPUT_FILE%.md}.json"
    fi
else
    echo -e "\n❌ 命令执行失败，请检查服务是否运行"
    exit 1
fi

# 清理临时文件
rm -f "$temp_json"

echo -e "\n💡 使用提示:"
echo "- 检查服务状态: ps aux | grep uvicorn"
echo "- 查看API文档: http://localhost:8000/docs"
echo "- 增加超时时间可能有助于解析复杂文章"
echo "- 如需获取完整JSON响应，请使用: curl -X POST http://localhost:8000/process -H \"Content-Type: application/json\" -d '{\"url\":\"$URL\", \"timeout\":$TIMEOUT}'"